<?php
/**
 * @brief Klasa encyjna MarketEntity
 * 
 * Klasa reprezentująca jednostki rynkowe biorące udział w handlu wielotowarowym.
 * Upraszczając, klasa ta jest reprezentacją uzytkownikow biorących udział w 
 * aukcjach.
 * 
 */
class Application_Model_MarketEntity
{
    protected $_password; /*!< Hasło użytkownika (zaszyfrowane).*/
    protected $_email; /*!< Adres e-mail. */
    protected $_salt; /*!< Sól.*/
    protected $_login; /*!< Login - użytkownicy są rozpoznawani po nim. */
    protected $_name; /*!< Imię.*/
    protected $_name2; /*!< Drugie imię. */
    protected $_surname; /*!< Nazwisko. */
    protected $_address; /*!< Tablica z danymi adresowymi */
    protected $_role; /*!< Rola jednostki. */
    
    /**
     * @brief Konstruktor 
     * 
     * Przyjmuje tablicę znaków i na jej podstawie uzupełnia pola,
     * przy pomocy setOptions.
     * @param array $options 
     */ 
    public function __construct(array $options = null) {
        if (is_array($options)) {
            $this->setOptions($options);
        }
    }

    /**
     * @brief Konstruktor 
     * 
     * Przyjmuje tablicę znaków i na jej podstawie uzupełnia pola,
     * przy pomocy setOptions.
     * @param array $options 
     */
    public function setOptions(array $options) {

        $methods = get_class_methods($this);

        foreach ($options as $key => $value) {

            $method = 'set' . ucfirst($key);

            if (in_array($method, $methods)) {

                $this->$method($value);
            }
        }
        return $this;
    }
    

    /**
     * @brief Metoda zwracająca zaszyfrowane hasło uzytkownika.
     *
     * @return string 
     */
    public function getPassword() {
        return $this->_password;
    }
    /**
     * @brief Metoda ustawiająca zaszyfrowane hasło uzytkownika.
     *
     * @param string $_password 
     */
    public function setPassword($_password) {
        $this->_password = $_password;
    }
    /**
     * @brief Metoda zwracająca e-mail uzytkownika.
     *
     * @return string 
     */
    public function getEmail() {
        return $this->_email;
    }
    /**
     * @brief Metoda ustawiająca e-mail uzytkownika.
     *
     * @param string $_email 
     */
    public function setEmail($_email) {
        $this->_email = $_email;
    }
    /**
     * @brief Metoda zwracająca sól do szyfrowania hasła.
     *
     * @return string
     */
    public function getSalt() {
        return $this->_salt;
    }
    /**
     * @brief Metoda ustawiająca sól do szyfrowania hasła.
     *
     * @param string $_salt 
     */
    public function setSalt($_salt) {
        $this->_salt = $_salt;
    }
    /**
     * @brief Metoda zwracająca login - identyfiaktor jednostki.
     *
     * @return string 
     */
    public function getLogin() {
        return $this->_login;
    }
    /**
     * @brief Metoda ustawiająca login - identyfiaktor jednostki.
     *
     * @param string $_login 
     */
    public function setLogin($_login) {
        $this->_login = $_login;
    }
    /**
     * @brief Metoda zwracająca imię użytkownika.
     *
     * @return string 
     */
    public function getName() {
        return $this->_name;
    }
    /**
     * @brief Metoda ustawiająca imię użytkownika.
     *
     * @param string $_name 
     */
    public function setName($_name) {
        $this->_name = $_name;
    }
    /**
     * @brief Metoda zwracająca drugie imię użytkownika.
     *
     * @return string 
     */
    public function getName2() {
        return $this->_name2;
    }
    /**
     * @brief Metoda ustawiająca drugie imię użytkownika.
     *
     * @param string $_name2 
     */
    public function setName2($_name2) {
        $this->_name2 = $_name2;
    }
    /**
     * @brief Metoda zwracająca nazwisko użytkownika.
     *
     * @return string 
     */
    public function getSurname() {
        return $this->_surname;
    }
    /**
     * @brief Metoda ustawiająca nazwisko użytkownika.
     *
     * @param string $_surname 
     */
    public function setSurname($_surname) {
        $this->_surname = $_surname;
    }
    /**
     * @brief Metoda zwracająca adres kontaktowy użytkownika.
     * @return string 
     */
    public function getAddress() {
        return $this->_address;
    }
    /**
     * @brief Metoda ustawiająca adres kontaktowy użytkownika.
     * Na adres składa się:
     * - Nazwa ulicy.
     * - Numer bydynku.
     * - Numer mieszkania.
     * - Nazwa miasta
     * - Kod pocztowy.
     * 
     * @param array $_address 
     */
    public function setAddress($_address) {
        $this->_address = $_address;
    }
    /**
     * @brief Metoda zwracająca rolę jednostki w systemie.
     *
     * @return 'admin' | 'user'
     */
    public function getRole() {
        return $this->_role;
    }
    /**
     * @brief Metoda ustawiająca rolę jednostki w systemie.
     *
     * @param string $_role 
     */
    public function setRole($_role) {
        $this->_role = $_role;
    }

    /**
     * @brief Metoda zmieniająca stare hasło na nowe. 
     * 
     * Metoda sprawdza dodatkowo czy wprowadzone "domniemane" hasło pokrywa się 
     * z tym pobranym z bazy danych.
     * 
     * @param string $old stare hasło
     * @param string $new nowe hasło
     * @return string komunikat. 
     */
    public function changePassword($old, $new) {
        if($this->getPassword() == sha1($old.$this->getSalt())){
            $this->setPassword(sha1($new.$this->getSalt()));
            return 'Poprawnie zmieniono hasło';
        }
        else            return 'Nie udało się zmienić hasła';
    }
    /**
     *  @brief Metoda zmieniająca adres z tablicy na string.
     * 
     * @param array $_address
     * @return string 
     * 
     */
    public static function addressString($_address) {

             
                $string = 'Ul. '.$_address['street'];
                $string .= ' '.$_address['number'];
                if(!empty($_address['flat']))
                {
                    $nr = $_address['flat'];
                    $string .= ' m. '.$nr;
                }
                $string .= '<br />'.$_address['city'];
                $string .= ' '.$_address['postcode'];
                
                
                return $string;
                

    }
    
    

}

